package _220316;

/**
 * @author ShadowLim
 * @create 2022-03-16-10:22
 */
public class _阶乘约数 {
    /** tags:数学
     *  https://blog.csdn.net/weixin_45644869/article/details/117571970
     *  定理：
     *  任意一个正整数 X 都可以表示成若干个质数乘积的形式，
     *  即 X = p1^a1 * p2^a2 *… * pk^ak，约数个数 = (a1 + 1)(a2 + 1)……(ak + 1).
     *  所以只要将2到100的数分解质因数并统计质因数的个数，然后累乘即可得出答案。
     */
    static int[] a = new int[105];

    public static void main(String[] args) {
        long ans = 1;
        for (int i = 2; i <= 100; i++) {
            int num = i;
            for (int j = 2; j <= num / j; j++) {    // 分解质因数
                while (num % j == 0) {  // j 为质因数
                    a[j]++;
                    num /= j;   // 步骤①
                }
            }
            // 假设数字X的质因数一共有n个 则数字X的前n - 1个质因数 再乘上「步骤①」的num值即等于X
            // 因为1不是质数 若「步骤①」最后得到的num值大于1 此时num为数字X的最后一个质因数 要统计进去
            if (num > 1) {
                a[num]++;
            }
        }
        for (int i = 1; i <= 100; i++) {
            ans = ans * (a[i] + 1);
        }
        System.out.println(ans);
    }
}
